GA4 + GTM + GSC • UTMs • Key Events
College of Business Administration - Cal Poly Pomona
2/16/2026
Live slides available at https://ccidm.github.io/measurement-stack-workshop-slides/ga4-gtm-gsc-workshop-slides.html
After taking this workshop, participants should be able to:
Digital marketing roles fall into 4 categories, and each needs this data stack differently.
(Writers, Social, Designers)
(SEO, PPC, Email Specialists)
(Analysts, Data Scientists)
(Managers, CMOs)
Tag management system that lets you configure, deploy, and troubleshoot tracking tags from a web interface—no code changes needed. (Facebook, EventBrite, etc.)
Next-gen analytics collecting event-based data from websites/apps to understand full customer journeys with privacy controls and predictive insights.
Webmaster tool to monitor indexing, search performance, crawl errors, and optimize site visibility in Google Search results.
Tip
Use one Google account across tools.
Connect our Quarto site to the Google Marketing Platform (GA4 + GTM).
To follow along, you need:
Why this matters
We are moving from “static pages” to “measurable data” by injecting tracking codes into your live environment.
There are two main paths for building the “container” for your data ecosystem.
(Content Management Systems)
(Technical & Academic)
For this workshop
We will use RSMT’s website (Rising Stars Muay Thai). It is built in Quarto and is already connected/setup for us to analyze.
Before we touch the code/website, we need the containers.
GTM-XXXXXX).<head> and <body>).G-XXXXXXXX).mysite.com).<head> and <body> scripts.G-XXXXXXXX) for your website code.We will focus on the Overview reports to get a high-level health check of the business.
(Reports > Generate Leads > Overview)
(Reports > Understand web and/or app traffic > Overview)
(The Custom Report Builder)
G-XXXXXXXX.Note: Until you hit Publish, your changes are only saved in a “Draft” version.
page_view event is listed.Expected Outcome
If you see events populating the timeline in real-time, your connection is successful. If the timeline is empty, check if your ad blocker is on!
https://search.google.com/search-console/
Why do this?
When you click “Add Property” in GSC, you have two choices:
example.com, m.example.com, www.example.com, http://, https://.https://www.example.com).Google needs proof you own the site. Choose the method that fits your access level:
| Method | Difficulty | Best Use Case |
|---|---|---|
| DNS Record | High | Domain Property. Best for full coverage. Requires logging into GoDaddy/Namecheap. |
| HTML File | Medium | URL Prefix. You have FTP/File access to the server root. |
| HTML Tag | Low | URL Prefix. WordPress/Wix users. Copy/paste a meta tag into your header. |
| GA4 / GTM | Lowest | URL Prefix. If you already installed GA4/GTM (and have “Edit” permission), this verifies instantly! |
Pro Tip
If you just set up GA4/GTM in the previous step, try the Google Analytics verification method first. It’s one click!
Data doesn’t appear automatically. You must Link and Publish.
Result: A new “Search Console” tab will appear in your main reporting menu, showing Queries and Landing Pages.
Without UTMs, GA4 can usually tell you where a user came from (e.g., “They came from Facebook”).
But it cannot tell you:
The Solution
UTM parameters are “tags” we add to the end of a link. They force GA4 to record exactly what we tell it to record. Example in GA4 > Reports > User acquisition > First user source / medium
| Parameter | Definition | Example |
|---|---|---|
utm_source |
The “Who” (The referrer) | google, newsletter, facebook |
utm_medium |
The “How” (Marketing channel) | cpc (paid), email, social |
utm_campaign |
The “Why” (Product/Promotion) | spring_sale, webinar_launch |
utm_content |
The “What” (Specific ad/link) | sidebar_link, video_ad, text_link |
utm_term |
The Keywords (Paid Search) | running+shoes, marketing+course |
Data is only useful if it is consistent.
GA4 treats Email, email, and EMAIL as three completely different traffic sources.
If five people on your team name campaigns differently, your reports will be unreadable.
spring-sale, Spring_Sale, springsale26spring_sale_2026 (Standardized)Goal: Create a tracking link for a LinkedIn post promoting the Spring Workshop.
| Parameter | Value | Logic |
|---|---|---|
| Website URL | https://yoursite.com |
Where they go. |
| Campaign Source | linkedin |
The specific site. |
| Campaign Medium | social |
The marketing channel. |
| Campaign Name | spring_workshop_2026 |
The strategic effort. |
Google has renamed metrics to align better with Google Ads.
| Old Term | New Term | Definition |
|---|---|---|
| Event | Event | Something happened (Page view, scroll). |
| Conversion | Key Event | Something important happened (Purchase, Signup). |
| N/A | Conversion | A Key Event shared with Google Ads for bidding. |
The Rule
In GA4, you measure Key Events. In Google Ads, you bid on Conversions.
In Google Tag Manager:
Page Path contains /thank-you/confirmed, /success - whatever your URL is).Logic: We only want this to fire when a user actually lands on the confirmation page.
In Google Tag Manager:
G-XXXXXXXX.generate_leadWhy generate_lead?
Using Google’s Recommended Event Names unlocks automatic reporting features in the dashboard.
Even if GTM sends the event, GA4 treats it as “just another event” until you tell it otherwise.
The “Immediate Fix” Method:
generate_lead exactly as you typed it in GTM.Why do this manually? Automatic detection can take 24 hours. Creating it manually ensures it is tracked as a Key Event immediately from the moment you publish.
https://github.com/CCIDM/portfolio-website-template.gitindex.qmd to customize your content.quarto publish netlify. You will be prompted to login to netlify. Create account or login.